/**
 * 生成深色背景颜色（保证白色文本可读）
 * @returns {string} 十六进制颜色（如 #1a2b3c）
 */
export function generateDarkColor() {
  // 生成随机 HSL 颜色（Hue: 0-360°, Saturation: 70-100%, Lightness: 10-30%）
  const h = Math.floor(Math.random() * 361);
  const s = Math.floor(Math.random() * 361); // 70; // 饱和度较高，避免灰暗色
  const l = Math.floor(Math.random() * 361); // + 10; // 亮度限制在深色范围

  // 将 HSL 转换为 RGB
  const [r, g, b] = hslToRgb(h, s, l);

  // 转换为十六进制
  const hex = rgbToHex(r, g, b);

  // 验证白色文本对比度是否达标（≥4.5:1）
  if (checkContrast(hex, "#ffffff") >= 4.5) {
    return hex;
  } else {
    return generateDarkColor(); // 递归生成新颜色
  }
}

// HSL 转 RGB（参考网页5的转换逻辑）
function hslToRgb(h, s, l) {
  s /= 100;
  l /= 100;
  const c = (1 - Math.abs(2 * l - 1)) * s;
  const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
  const m = l - c / 2;
  let r, g, b;

  if (h >= 0 && h < 60) [r, g, b] = [c, x, 0];
  else if (h < 120) [r, g, b] = [x, c, 0];
  else if (h < 180) [r, g, b] = [0, c, x];
  else if (h < 240) [r, g, b] = [0, x, c];
  else if (h < 300) [r, g, b] = [x, 0, c];
  else [r, g, b] = [c, 0, x];

  return [
    Math.round((r + m) * 255),
    Math.round((g + m) * 255),
    Math.round((b + m) * 255),
  ];
}

// RGB 转十六进制
function rgbToHex(r, g, b) {
  return "#" + [r, g, b].map((x) => x.toString(16).padStart(2, "0")).join("");
}

// 对比度计算（基于 WCAG 2.1 公式，网页6/21/24）
function checkContrast(hex1, hex2) {
  const [r1, g1, b1] = hexToRgb(hex1);
  const [r2, g2, b2] = hexToRgb(hex2);
  const l1 = (0.2126 * r1 + 0.7152 * g1 + 0.0722 * b1) / 255;
  const l2 = (0.2126 * r2 + 0.7152 * g2 + 0.0722 * b2) / 255;
  return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);
}

// 十六进制转 RGB（网页7/8/9）
function hexToRgb(hex) {
  hex = hex.replace(/^#/, "");
  const bigint = parseInt(hex, 16);
  return [(bigint >> 16) & 255, (bigint >> 8) & 255, bigint & 255];
}
